package com.binance.mbxgateway.web.service;

import org.hibernate.validator.constraints.NotEmpty;

public interface IMatchboxService {

    public String postOrder(@NotEmpty Object accountId, @NotEmpty Object quantity, @NotEmpty Object side,
            @NotEmpty Object symbol, @NotEmpty Object type, Object force, Object icebergQty, Object newClientOrderId,
            Object newOrderRespType, Object price, Object stopPrice, Object targetOrderId, Object timeInForce);


    public String getOrder(@NotEmpty Object symbol, Object orderId, Object origClientOrderId);


    public String getOpenOrders(@NotEmpty Object accountId, Object symbol);


    public String getAllOrders(@NotEmpty Object accountId, Object endTime, Object fromId, Object limit, Object startTime,
            Object symbol);


    public String deleteOrder(@NotEmpty Object accountId, @NotEmpty Object symbol, Object force, Object newClientOrderId,
            Object orderId, Object origClientOrderId);


    public String deleteOpenOrders(@NotEmpty Object accountId, @NotEmpty Object symbol, Object force);


    public String getSymbolOrders(@NotEmpty Object symbol, Object endTime, Object fromId, Object limit, Object startTime);


    public String postAccount(@NotEmpty Object externalId, Object buyerCommission, Object canDeposit, Object canTrade,
            Object canWithdraw, Object makerCommission, Object sellerCommission, Object takerCommission);


    public String getAccount(@NotEmpty Object accountId);


    public String putAccount(@NotEmpty Object accountId, @NotEmpty Object canDeposit, @NotEmpty Object canTrade,
            @NotEmpty Object canWithdraw);


    public String putAccountCommission(@NotEmpty Object accountId, @NotEmpty Object buyerCommission,
            @NotEmpty Object makerCommission, @NotEmpty Object sellerCommission, @NotEmpty Object takerCommission);


    public String postBalance(@NotEmpty Object accountId, @NotEmpty Object asset, @NotEmpty Object balanceDelta,
            @NotEmpty Object updateId);


    public String getBalanceLedger(@NotEmpty Object accountId, @NotEmpty Object asset, @NotEmpty Object endTime,
            @NotEmpty Object startTime);


    public String getAllAccounts();


    public String getAccountByExternalId(@NotEmpty Object externalId);


    public String putAccountSymbolsCommission(@NotEmpty Object accountId, @NotEmpty Object buyerCommission,
            @NotEmpty Object makerCommission, @NotEmpty Object sellerCommission, @NotEmpty Object symbols,
            @NotEmpty Object takerCommission);


    public String getAccountSymbolsCommission(@NotEmpty Object accountId);


    public String getAccountSymbolCommissionHistory(@NotEmpty Object accountId, @NotEmpty Object endTime,
            @NotEmpty Object startTime, @NotEmpty Object symbol);


    public String getAccountTPlusLockState(@NotEmpty Object accountId, @NotEmpty Object symbols);


    public String putGasOptOut(@NotEmpty Object accountId);


    public String deleteGasOptOut(@NotEmpty Object accountId);


    public String putAccountAsset(@NotEmpty Object accountId, @NotEmpty Object asset, @NotEmpty Object available,
            @NotEmpty Object locked, @NotEmpty Object symbolType);


    public String getOrderRateLimit(@NotEmpty Object rateInterval);


    public String putOrderRateLimit(@NotEmpty Object limit, @NotEmpty Object rateInterval);


    public String putOrderRateLimitAccount(@NotEmpty Object accountId, @NotEmpty Object limit,
            @NotEmpty Object rateInterval);


    public String deleteOrderRateLimitAccount(@NotEmpty Object accountId, @NotEmpty Object rateInterval);


    public String getApiKeys(@NotEmpty Object accountId);


    public String postApiKey(@NotEmpty Object accountId, @NotEmpty Object desc, Object canAccessSecureWs,
            Object canControlUserStreams, Object canTrade, Object canViewMarketData, Object canViewUserData,
            Object force);


    public String deleteApiKey(@NotEmpty Object accountId, @NotEmpty Object keyId);


    public String postApiKeyRule(@NotEmpty Object accountId, @NotEmpty Object ip, @NotEmpty Object keyId);


    public String deleteApiKeyRule(@NotEmpty Object accountId, @NotEmpty Object keyId, @NotEmpty Object ruleId);


    public String getApiKeyCheck(@NotEmpty Object apiKey, @NotEmpty Object ip, Object payload, Object recvWindow,
            Object signature, Object timestamp);


    public String putApiKeyPermissions(@NotEmpty Object accountId, @NotEmpty Object canAccessSecureWs,
            @NotEmpty Object canControlUserStreams, @NotEmpty Object canTrade, @NotEmpty Object canViewMarketData,
            @NotEmpty Object canViewUserData, @NotEmpty Object keyId, Object force);


    public String getApiKeyLock(@NotEmpty Object accountId);


    public String putApiKeyLock(@NotEmpty Object accountId);


    public String deleteApiKeyLock(@NotEmpty Object accountId, @NotEmpty Object revert);


    public String getEstimateSymbol(@NotEmpty Object baseDecimalPlaces, @NotEmpty Object quoteDecimalPlaces,
            Object mathSystemType, Object maxPrice, Object maxQty);


    public String getAssets();


    public String postAsset(@NotEmpty Object asset, @NotEmpty Object decimalPlaces);


    public String getSymbols();


    public String postSymbol(@NotEmpty Object baseAsset, @NotEmpty Object commissionType, @NotEmpty Object maxPrice,
            @NotEmpty Object maxQty, @NotEmpty Object minQty, @NotEmpty Object quoteAsset, @NotEmpty Object symbol,
            @NotEmpty Object symbolType, Object matchingUnitType, Object mathSystemType);


    public String putSymbol(@NotEmpty Object symbol, @NotEmpty Object symbolStatus);


    public String getSymbolHistory(@NotEmpty Object startTime, @NotEmpty Object symbol);


    public String getAuctionReports(@NotEmpty Object startTime, @NotEmpty Object symbol);


    public String putOrderTypes(@NotEmpty Object enableIceberg, @NotEmpty Object enableMarket,
            @NotEmpty Object enableStopLoss, @NotEmpty Object enableStopLossLimit, @NotEmpty Object enableTakeProfit,
            @NotEmpty Object enableTakeProfitLimit, @NotEmpty Object symbol);


    public String putSymbolCommission(@NotEmpty Object buyerCommission, @NotEmpty Object makerCommission,
            @NotEmpty Object sellerCommission, @NotEmpty Object symbol, @NotEmpty Object takerCommission);


    public String getSymbolCommission(@NotEmpty Object symbol);


    public String getSymbolCommissionHistory(@NotEmpty Object endTime, @NotEmpty Object startTime,
            @NotEmpty Object symbol);


    public String putSymbolCommissionType(@NotEmpty Object commissionType, @NotEmpty Object symbol);


    public String getUserTrades(@NotEmpty Object accountId, Object endTime, Object fromId, Object limit, Object startTime,
            Object symbol);


    public String getTrades(@NotEmpty Object symbol, Object endTime, Object fromId, Object limit, Object startTime);


    public String getFilters(@NotEmpty Object symbol);


    public String postPriceFilter(@NotEmpty Object maxPrice, @NotEmpty Object minPrice, @NotEmpty Object symbol,
            @NotEmpty Object tickSize);


    public String deletePriceFilter(@NotEmpty Object symbol);


    public String postPositionFilter(@NotEmpty Object maxQty, @NotEmpty Object symbol, Object exemptAcct);


    public String deletePositionFilter(@NotEmpty Object symbol);


    public String postLotSizeFilter(@NotEmpty Object maxQty, @NotEmpty Object minQty, @NotEmpty Object stepSize,
            @NotEmpty Object symbol);


    public String deleteLotSizeFilter(@NotEmpty Object symbol);


    public String postTPlusSellFilter(@NotEmpty Object endTime, @NotEmpty Object symbol, Object exemptAcct);


    public String deleteTPlusSellFilter(@NotEmpty Object symbol, Object force);


    public String postNumOrdersFilter(@NotEmpty Object numOrders, @NotEmpty Object symbol, Object exemptAcct);


    public String deleteNumOrdersFilter(@NotEmpty Object symbol);


    public String postMinNotionalFilter(@NotEmpty Object enableMarket, @NotEmpty Object minNotional,
            @NotEmpty Object symbol);


    public String deleteMinNotionalFilter(@NotEmpty Object symbol);


    public String postNumAlgoOrdersFilter(@NotEmpty Object numOrders, @NotEmpty Object symbol, Object exemptAcct);


    public String deleteNumAlgoOrdersFilter(@NotEmpty Object numOrders, @NotEmpty Object symbol, Object exemptAcct);


    public String postIcebergPartsFilter(@NotEmpty Object limit, @NotEmpty Object symbol);


    public String deleteIcebergPartsFilter(@NotEmpty Object symbol);


    public String postMarketLotSizeFilter(@NotEmpty Object maxQty, @NotEmpty Object minQty, @NotEmpty Object stepSize,
            @NotEmpty Object symbol);


    public String deleteMarketLotSizeFilter(@NotEmpty Object symbol);


    public String postPercentPriceFilter(@NotEmpty Object multiplierDown, @NotEmpty Object multiplierUp,
            @NotEmpty Object symbol);


    public String deletePercentPriceFilter(@NotEmpty Object symbol);


    public String postNumIcebergOrders(@NotEmpty Object numOrders, @NotEmpty Object symbol, Object exemptAcct);


    public String deleteNumIcebergOrders(@NotEmpty Object symbol);


    public String getCommission(@NotEmpty Object symbol);


    public String getAssetBalance(@NotEmpty Object asset);


    public String getAssetLedger(@NotEmpty Object asset, @NotEmpty Object endTime, @NotEmpty Object startTime);


    public String postUserDataStream(@NotEmpty Object accountId);


    public String putUserDataStream(@NotEmpty Object listenKey);


    public String deleteUserDataStream(@NotEmpty Object listenKey);


    public String putAllSymbols(@NotEmpty Object symbolStatus);


    public String putExchangeRate(@NotEmpty Object baseAsset, @NotEmpty Object price, @NotEmpty Object quoteAsset,
            Object invert);


    public String putExchangeGas(@NotEmpty Object asset, @NotEmpty Object bips);


    public String getPing();


    public String getTime();


    public String getCommands();

}
